tg-me.com/golang_books/975
Last Update:
📚 Организация middleware в Go без сторонних зависимостей
Если ты пишешь веб-приложения на Go и хочешь избавиться от внешних зависимостей вроде alice
, статья от Алекса Эдвардса — must read:
https://www.alexedwards.net/blog/organize-your-go-middleware-without-dependencies
• Проблема: стандартная библиотека Go не даёт удобного способа цепочечного подключения middleware
• Цель: избежать дублирования кода и сделать middleware масштабируемыми без сторонних пакетов
💡 Решение — создать собственный тип chain
, который позволяет «наматывать» middleware на обработчики:
type chain []func(http.Handler) http.Handler
func (c chain) then(h http.Handler) http.Handler {
for i := len(c) - 1; i >= 0; i-- {
h = c[i](h)
}
return h
}
func (c chain) thenFunc(h http.HandlerFunc) http.Handler {
return c.then(h)
}
Теперь ты можешь описывать цепочки middleware так:
mux := http.NewServeMux()
baseChain := chain{requestID, logRequest}
adminChain := append(baseChain, authenticateUser, requireAdminUser)
mux.Handle("GET /", baseChain.thenFunc(home))
mux.Handle("GET /admin", adminChain.thenFunc(showAdminDashboard))
Этот подход:
• Простой
• Без зависимостей
• Легко расширяется
Полная статья и объяснения тут:
@golang_books